Digital video streams are typically encoded using one of many different encoding standards. For example, a digital video stream may be compressed for conversion into a data format that requires fewer bits. This compression can be lossless such that the original video stream can be recreated upon decoding or can be lossy such that an exact replica of the original video stream cannot be recreated, but where the decoding of the compressed data is more efficient.
There are currently a large number of video encoding standards, and new standards are frequently emerging. Examples of current video encoding standards include JPEG (Joint Photographic Experts Group), MPEG (Moving Pictures Experts Group), MPEG-2, MPEG-3, MPEG-4, H.263, H.263+, H.264, and proprietary standards such as Real Video and Windows Media. In most of the common video standards, the macro-blocks of a video stream are transmitted by the encoder in the raster scan order (e.g., left to right and top to bottom). However, the H.264 standard supports the transmission of macro-blocks in non-raster scan order. In addition, even if the encoder transmits the macro-blocks in the usual raster scan order, the same macro-blocks may be received at the decoder end in a different order, so the H.264 standard requires the decoder to handle this situation as well.
It is often desirable to perform post-processing operations on a decoded video stream to improve the quality of the stream. For example, a deblocking filter may be used to perform a deblocking operation on the video stream. Some deblocking filters perform deblocking operations on fully decoded frames of the video stream. These deblocking filters are referred to as out-of-loop deblocking filters, and are performed independent of the decoding of the video stream. Other deblocking filters performed deblocking operations at the macro-block level. These in-the-loop deblocking filters perform deblocking operations on macro-blocks after they are decoded. Moreover, in-the-loop deblocking filters can perform deblocking operations before the decoded macro-block is written to memory.
A typical in-the-loop deblocking filter operates on neighboring macro-block edges. If the macro-blocks are received in non-raster scan order, then the in-the-loop deblocking filter cannot be operated until all the macro-blocks of the frame are received and decoded. This requires that one frame has to be entirely decoded and stored in the memory and then the in-the-loop deblocking filter has to be applied. This further requires that one video frame of data has to be stored in the memory at an extra storage cost, and that for each video frame two video frames of additional memory bandwidth are required (one frame write and one frame read).
Accordingly, currently available digital video decoders require additional memory to support in-the-loop deblocking of macro-blocks. Thus, what is needed is a new digital video decoder architecture that overcomes the limitations on the prior art. The new digital video decoder should provide in-the-loop deblocking of a video stream without requiring additional memory for ordering the macro-blocks in raster scan order.